package com.oyjd.framework.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 随机相关方法
 * 
 * @author <b>欧建东<br/>
 *         Email:oyjd@163.com</b>
 * 
 */
public class RandUtil {
	public static Random rand = new Random();
	private static String NUM = "0123456789";
	private static String ALL = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

	/**
	 * 获取随机字符串
	 * 
	 * @param pre
	 *            前缀
	 * @param num
	 *            随机部分数字长度
	 * @return
	 */
	public static String get(String pre, int num) {
		String s = pre;
		for (int i = 0; i <= num; i++) {
			s += NUM.charAt(rand.nextInt(NUM.length()));
		}
		return s;
	}

	/**
	 * 获取随机字符串
	 * 
	 * @param num
	 *            随机长度
	 * @return
	 */
	public static String get(int num) {
		String s = "";
		for (int i = 0; i < num; i++) {
			s += ALL.charAt(rand.nextInt(ALL.length()));
		}
		return s;
	}

	/**
	 * 获取随机数字
	 * 
	 * @param max
	 *            最大数字
	 * @param size
	 *            需要的数字个数
	 * @return
	 */
	public static List<Integer> getRandNum(int max, int size) {
		List<Integer> list = new ArrayList<Integer>();
		if (max > size) {
			while (list.size() < size) {
				int n = rand.nextInt(max);
				if (!list.contains(n)) {
					list.add(n);
				}
			}
		} else {
			for (int i = 0; i < max; i++) {
				list.add(i);
			}
		}
		return list;
	}

	/**
	 * 获取随机集合
	 * 
	 * @param max
	 *            最大数字
	 * @param size
	 *            需要的数字个数
	 * @return
	 */
	public static <T> List<T> getRandList(List<T> sou, int size) {
		List<T> list = new ArrayList<T>();
		List<Integer> pos = getRandNum(sou.size(), size);
		for (int i : pos) {
			list.add(sou.get(i));
		}
		return list;
	}
}
